#include "PCResource_theme_sky.h"

enum 
{
  MODULE_CPU = 0,
  MODULE_RAM,
  MODULE_GPU,
  MODULE_GRAM,
};

typedef struct
{
  lv_obj_t *cont;               //组件容器
  lv_obj_t *title;                //组件标题
  lv_obj_t *usage_label;    //组件使用率标签
  lv_obj_t *data_label;       //组件数据标签
  lv_obj_t *usage_chart;    //组件使用率图表
  lv_obj_t *data_chart;     //组件数据图表     
}module_t;

typedef struct 
{
  lv_obj_t *title;      //组件信息标题
  lv_obj_t *data_label;   //组件信息数据标签
}module_info_t;

LV_FONT_DECLARE(lv_font_miao_16)
LV_FONT_DECLARE(lv_font_miao_25)
LV_FONT_DECLARE(lv_font_miao_30)
LV_FONT_DECLARE(lv_font_miao_60)

LV_IMG_DECLARE(icon_bk)

static void pc_resource_gui_sky_theme_init(lv_obj_t *parent, gui_opt_t *opts);
static void pc_resource_gui_sky_theme_update(PCResInfo *info);
static void pc_resource_gui_sky_theme_release(void);
static void pc_resource_gui_sky_theme_icon_event_cb(lv_event_t *e);

gui_theme_operations sky_theme =
{
  .init = pc_resource_gui_sky_theme_init,
  .update = pc_resource_gui_sky_theme_update,
  .release = pc_resource_gui_sky_theme_release,
};

// 回调函数集合
static gui_opt_t *gui_opts;

// 背景图片
static lv_obj_t *back_img;

//图标
static lv_obj_t *icon_img;

//四个组件
static module_t module[4];

//左侧组件信息
static module_info_t module_info[6];

//底部CPU利用率图表
static lv_obj_t *cpu_chart;

//底部网络下载速率图表
static lv_obj_t *net_chart;

//下载网速标签
static lv_obj_t *down_label;

//上传网速标签
static lv_obj_t *up_label;

//时间标签
static lv_obj_t *time_label;

//背景label，主要为组件名称标签
static lv_obj_t *bg_label[4];

//背景lable标签位置
static const lv_coord_t bg_label_pos[][2] = 
{
  {896, 30}, {51, 395}, {70, 425}, {90, 460}
};

//背景label标签名称
static const char *bg_label_name[] = 
{
  "Info", "NetWork", "Down", "Up"
};

//4个组件的标题
static const char *module_name[] = 
{
  "CPU", "RAM", "GPU", "GRAM"
};

//4个组件的数据
static const char *module_data_fmt[] = 
{
  "%d℃", "%dMB", "%d℃", "%dMB"
};

//左侧组件信息的标题
static const char *module_info_name[] = 
{
  "CPU", "GPU", "CPU", "GPU", "CPU", "GPU"
};

//左侧组件信息的坐标
static const lv_coord_t module_info_label_pos[][2] = 
{
  {653, 70}, {653, 95}, {653, 160}, {653, 185}, {653, 235}, {653, 260} 
};

//左侧组件信息的数据
static const char *module_info_data_fmt[] = 
{
  "%d #2a8ea4 MHz#", "%d #2a8ea4 MHz#", 
  "%d #2a8ea4 RPM#", "%d #2a8ea4 RPM#",
  "%d.%d #2a8ea4 W#", "%d.%d #2a8ea4 W#"
};

/**
 *@brief sky主题初始化函数
 */
static void pc_resource_gui_sky_theme_init(lv_obj_t *parent, gui_opt_t *opts)
{
  gui_opts = opts;

  // 创建背景图片;
  back_img = lv_img_create(parent);
  lv_obj_set_size(back_img, 1024, 600);
  lv_img_set_src(back_img, "S:./res/pc_resource/background/skybg.bin"); 
  lv_obj_center(back_img);

  //创建背景label
  for(int i = 0; i < sizeof(bg_label) / sizeof(bg_label[0]); i++)
  {
    lv_obj_t *label = lv_label_create(back_img);
    lv_label_set_text(label, bg_label_name[i]);
    lv_obj_set_style_text_font(label, &lv_font_miao_30, LV_STATE_DEFAULT);
    lv_obj_set_pos(label, bg_label_pos[i][0], bg_label_pos[i][1]);
    lv_obj_set_style_text_color(label, lv_color_hex(0xeaeaea), LV_STATE_DEFAULT);
    
    bg_label[i] = label;
  }
  lv_obj_set_style_text_font(bg_label[2], &lv_font_miao_25, LV_STATE_DEFAULT);
  lv_obj_set_style_text_color(bg_label[2], lv_color_hex(0xb2e8ff), LV_STATE_DEFAULT);
  lv_obj_set_style_text_font(bg_label[3], &lv_font_miao_25, LV_STATE_DEFAULT);
  lv_obj_set_style_text_color(bg_label[3], lv_color_hex(0xb2e8ff), LV_STATE_DEFAULT);

  //创建4个组件
  for(int i = 0; i < 4; i++)
  {
    //创建组件容器
    lv_obj_t *cont = lv_obj_create(back_img);
    lv_obj_set_size(cont, 270, 135);
    lv_obj_clear_flag(cont, LV_OBJ_FLAG_SCROLLABLE);                           // 禁止对象滚动
    lv_obj_set_style_bg_opa(cont, LV_OPA_TRANSP, LV_STATE_DEFAULT);                // 背景透明度
    lv_obj_set_style_border_opa(cont, LV_OPA_TRANSP, LV_STATE_DEFAULT);        // 边框透明

    //创建组件使用率标签
    lv_obj_t *usage_label = lv_label_create(cont);
    lv_obj_set_style_text_font(usage_label, &lv_font_miao_60, LV_STATE_DEFAULT);       // 设置字体
    lv_obj_set_style_text_color(usage_label, lv_color_hex(0xeaeaea), LV_STATE_DEFAULT); // 字体颜色
    lv_label_set_text(usage_label, "00");
    lv_obj_align(usage_label, LV_ALIGN_TOP_LEFT, 10, -20);

    //创建组件标题
    lv_obj_t *title_label = lv_label_create(cont);
    lv_obj_set_style_text_font(title_label, &lv_font_miao_30, LV_STATE_DEFAULT);       // 设置字体
    lv_obj_set_style_text_color(title_label, lv_color_hex(0x80ff00), LV_STATE_DEFAULT); // 字体颜色
    lv_label_set_text(title_label, module_name[i]);
    lv_obj_align_to(title_label, usage_label, LV_ALIGN_OUT_RIGHT_TOP, 10, 5);

    //创建组件数据标签
    lv_obj_t *data_label = lv_label_create(cont);
    lv_obj_set_style_text_font(data_label, &lv_font_miao_25, LV_STATE_DEFAULT);       // 设置字体
    lv_obj_set_style_text_color(data_label, lv_color_hex(0xff8000), LV_STATE_DEFAULT); // 字体颜色
    lv_obj_set_style_text_align(data_label, LV_TEXT_ALIGN_RIGHT, LV_STATE_DEFAULT);   //文本对齐方向
    lv_label_set_text_fmt(data_label, module_data_fmt[i], 0);
    lv_obj_align(data_label, LV_ALIGN_TOP_RIGHT, 10, -15);

    //创建组件使用率图表
    lv_obj_t *usage_chart = lv_chart_create(cont);
    lv_chart_set_div_line_count(usage_chart, 5, 20);
    lv_chart_set_type(usage_chart, LV_CHART_TYPE_LINE);
    lv_chart_set_update_mode(usage_chart, LV_CHART_UPDATE_MODE_SHIFT);  
    lv_chart_set_point_count(usage_chart, 40);        //点数40
    lv_chart_series_t *series = lv_chart_add_series(usage_chart, lv_color_hex(0xffffff), LV_CHART_AXIS_PRIMARY_Y);
    lv_obj_set_user_data(usage_chart, series);      //保存系列
    lv_obj_add_event_cb(usage_chart, chart_draw_evnet_cb, LV_EVENT_DRAW_PART_BEGIN, NULL);
    lv_obj_set_size(usage_chart, 260, 50);
    lv_obj_set_style_line_color(usage_chart, lv_color_hex(0x808080), LV_STATE_DEFAULT);
    lv_obj_set_style_border_color(usage_chart, lv_color_hex(0x808080), LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(usage_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);
    lv_obj_set_style_radius(usage_chart, 0, LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(usage_chart, 0, LV_STATE_DEFAULT);
    lv_obj_remove_style(usage_chart, NULL, LV_PART_INDICATOR);      //移除折线图数据点
    lv_obj_align(usage_chart, LV_ALIGN_BOTTOM_MID, 0, 15);

    //创建组件数据图表
    lv_obj_t *data_chart = lv_chart_create(cont);
    lv_obj_set_size(data_chart, 145, 30);
    lv_chart_set_type(data_chart, LV_CHART_TYPE_BAR);
    lv_chart_set_update_mode(data_chart, LV_CHART_UPDATE_MODE_SHIFT);  
    lv_chart_set_point_count(data_chart, 20);        //点数20
    lv_chart_set_range(data_chart, LV_CHART_AXIS_PRIMARY_Y, 0, 80);
    series = lv_chart_add_series(data_chart, lv_color_hex(0xff8000), LV_CHART_AXIS_PRIMARY_Y);
    lv_chart_set_all_value(data_chart, series, 0);   //初始化所有数值
    lv_obj_set_user_data(data_chart, series);      //保存系列
    lv_obj_add_event_cb(data_chart, chart_draw_evnet_cb, LV_EVENT_DRAW_PART_BEGIN, NULL);
    lv_obj_set_style_outline_width(data_chart, 3, LV_PART_ITEMS | LV_STATE_DEFAULT);
    lv_obj_set_style_outline_color(data_chart, lv_color_hex(0xff8000), LV_PART_ITEMS | LV_STATE_DEFAULT);
    lv_obj_set_style_line_opa(data_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(data_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);     //线条透明
    lv_obj_set_style_border_opa(data_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);     //边框透明
    lv_obj_set_style_radius(data_chart, 0, LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(data_chart, 0, LV_STATE_DEFAULT);
    lv_obj_remove_style(data_chart, NULL, LV_PART_INDICATOR);      //移除折线图数据点
    lv_obj_align_to(data_chart, usage_chart, LV_ALIGN_OUT_TOP_RIGHT, 0, -5);

    module[i].cont = cont;
    module[i].usage_label = usage_label;
    module[i].title = title_label;
    module[i].data_label = data_label;
    module[i].usage_chart = usage_chart;
    module[i].data_chart = data_chart;
  }

  //设置容器对齐
  lv_obj_set_pos(module[0].cont, 55, 50);
  lv_obj_align_to(module[1].cont, module[0].cont, LV_ALIGN_OUT_RIGHT_MID, 30, 0);
  lv_obj_align_to(module[2].cont, module[0].cont, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
  lv_obj_align_to(module[3].cont, module[2].cont, LV_ALIGN_OUT_RIGHT_MID, 30, 0);

  //创建左侧组件信息
  for(int i =0; i < sizeof(module_info) / sizeof(module_info[0]); i++)
  {
    lv_obj_t *title_label = lv_label_create(back_img);
    lv_obj_set_pos(title_label, module_info_label_pos[i][0], module_info_label_pos[i][1]);
    lv_obj_set_style_text_font(title_label, &lv_font_miao_25, LV_STATE_DEFAULT);       // 设置字体
    lv_obj_set_style_text_color(title_label, lv_color_hex(0xb2e8ff), LV_STATE_DEFAULT); // 字体颜色
    lv_label_set_text(title_label, module_info_name[i]);

    lv_obj_t *data_label = lv_label_create(back_img);
    lv_label_set_recolor(data_label, true);     //开启重绘色
    lv_obj_set_size(data_label, 125, 30);
    lv_obj_set_style_text_font(data_label, &lv_font_miao_25, LV_STATE_DEFAULT);       // 设置字体
    lv_obj_set_style_text_color(data_label, lv_color_hex(0xeaeaea), LV_STATE_DEFAULT); // 字体颜色
    lv_obj_set_style_text_align(data_label, LV_TEXT_ALIGN_RIGHT, LV_STATE_DEFAULT);   //文本对齐方向
    if(i != 4 && i != 5)
      lv_label_set_text_fmt(data_label, module_info_data_fmt[i], 0);
    else
      lv_label_set_text_fmt(data_label, module_info_data_fmt[i], 0, 0);

    lv_obj_align_to(data_label, title_label, LV_ALIGN_OUT_RIGHT_MID, 0, 0);

    module_info[i].title = title_label;
    module_info[i].data_label = data_label;
  }

  //创建底部cpu使用率图表
  cpu_chart = lv_chart_create(back_img);
  lv_chart_set_type(cpu_chart, LV_CHART_TYPE_LINE);
  lv_chart_set_update_mode(cpu_chart, LV_CHART_UPDATE_MODE_SHIFT);  
  lv_chart_set_point_count(cpu_chart, 80);        //点数40
  lv_chart_series_t *series = lv_chart_add_series(cpu_chart, lv_color_hex(0xffffff), LV_CHART_AXIS_PRIMARY_Y);
  lv_chart_set_all_value(cpu_chart, series, 0);   //初始化所有数值
  lv_obj_set_user_data(cpu_chart, series);      //保存系列 
  lv_obj_add_event_cb(cpu_chart, chart_draw_evnet_cb, LV_EVENT_DRAW_PART_BEGIN, NULL);
  lv_obj_set_size(cpu_chart, 919, 60);
  lv_obj_set_pos(cpu_chart, 53, 330);
  lv_obj_set_style_line_opa(cpu_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);        //线条透明
  lv_obj_set_style_bg_opa(cpu_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);
  lv_obj_set_style_border_opa(cpu_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);     //边框透明
  lv_obj_set_style_radius(cpu_chart, 0, LV_STATE_DEFAULT);
  lv_obj_set_style_pad_all(cpu_chart, 0, LV_STATE_DEFAULT);
  lv_obj_remove_style(cpu_chart, NULL, LV_PART_INDICATOR);      //移除折线图数据点

  net_chart = lv_chart_create(back_img);
  lv_chart_set_div_line_count(net_chart, 10, 20);
  lv_chart_set_type(net_chart, LV_CHART_TYPE_LINE);
  lv_chart_set_update_mode(net_chart, LV_CHART_UPDATE_MODE_SHIFT);  
  lv_chart_set_point_count(net_chart, 40);        //点数40
  series = lv_chart_add_series(net_chart, lv_color_hex(0x00ff00), LV_CHART_AXIS_PRIMARY_Y);
  lv_chart_set_all_value(net_chart, series, 0);   //初始化所有数值
  lv_obj_set_user_data(net_chart, series);      //保存系列 
  lv_obj_add_event_cb(net_chart, chart_draw_evnet_cb, LV_EVENT_DRAW_PART_BEGIN, NULL);
  lv_obj_set_size(net_chart, 430, 155);
  lv_obj_set_style_line_color(net_chart, lv_color_hex(0x808080), LV_STATE_DEFAULT);
  lv_obj_set_style_border_color(net_chart, lv_color_hex(0x808080), LV_STATE_DEFAULT);
  lv_obj_set_style_bg_opa(net_chart, LV_OPA_TRANSP, LV_STATE_DEFAULT);
  lv_obj_set_style_radius(net_chart, 0, LV_STATE_DEFAULT);
  lv_obj_set_style_pad_all(net_chart, 0, LV_STATE_DEFAULT);
  lv_obj_remove_style(net_chart, NULL, LV_PART_INDICATOR);      //移除折线图数据点
  lv_obj_align_to(net_chart, cpu_chart, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
  
  //创建下载速率标签
  down_label = lv_label_create(back_img);
  lv_obj_set_size(down_label, 140, 30);
  lv_obj_set_style_text_font(down_label, &lv_font_miao_25, LV_STATE_DEFAULT);       // 设置字体
  lv_obj_set_style_text_color(down_label, lv_color_hex(0xeaeaea), LV_STATE_DEFAULT); // 字体颜色
  lv_obj_set_style_text_align(down_label, LV_TEXT_ALIGN_RIGHT, LV_STATE_DEFAULT);   //文本对齐方向
  lv_label_set_text_fmt(down_label, "%dKB/s", 0);
  lv_obj_align_to(down_label, bg_label[2], LV_ALIGN_OUT_RIGHT_MID, 0, 0);

  //创建上传速率标签
  up_label  = lv_label_create(back_img);
  lv_obj_set_size(up_label, 140, 30);
  lv_obj_set_style_text_font(up_label, &lv_font_miao_25, LV_STATE_DEFAULT);       // 设置字体
  lv_obj_set_style_text_color(up_label, lv_color_hex(0xeaeaea), LV_STATE_DEFAULT); // 字体颜色
  lv_obj_set_style_text_align(up_label, LV_TEXT_ALIGN_RIGHT, LV_STATE_DEFAULT);   //文本对齐方向
  lv_label_set_text_fmt(up_label, "%dKB/s", 0);
  lv_obj_align_to(up_label, bg_label[3], LV_ALIGN_OUT_RIGHT_MID, 0, 0);

  //创建时间标签
  time_label = lv_label_create(back_img);
  lv_obj_set_style_text_font(time_label, &lv_font_miao_60, LV_STATE_DEFAULT);       // 设置字体
  lv_obj_set_style_text_color(time_label, lv_color_hex(0xb2e8ff), LV_STATE_DEFAULT); // 字体颜色
  lv_obj_set_style_text_align(time_label, LV_TEXT_ALIGN_RIGHT, LV_STATE_DEFAULT);   //文本对齐方向
  lv_label_set_text(time_label, "00:00");
  lv_obj_align_to(time_label, net_chart, LV_ALIGN_OUT_RIGHT_MID, 80, -10);

  //创建icon
  icon_img =  lv_img_create(back_img);
  lv_img_set_src(icon_img, &icon_bk);
  lv_obj_set_pos(icon_img, 880, 100);
  lv_obj_add_flag(icon_img, LV_OBJ_FLAG_CLICKABLE);    //设置可点击
  lv_obj_add_event_cb(icon_img, pc_resource_gui_sky_theme_icon_event_cb, LV_EVENT_SHORT_CLICKED, NULL);
  if (gui_opts != NULL && gui_opts->exit_cb != NULL)
    lv_obj_add_event_cb(icon_img, gui_opts->exit_cb, LV_EVENT_LONG_PRESSED, NULL);
}

/**
 *@brief sky主题数据更新函数
 */
static void pc_resource_gui_sky_theme_update(PCResInfo *info)
{
  //更新组件使用率图表数据
  lv_chart_series_t *series = lv_obj_get_user_data(module[MODULE_CPU].usage_chart);
  lv_chart_set_next_value(module[MODULE_CPU].usage_chart, series, info->cpu_usage);
  series = lv_obj_get_user_data(module[MODULE_RAM].usage_chart);
  lv_chart_set_next_value(module[MODULE_RAM].usage_chart, series, info->ram_usage);
  series = lv_obj_get_user_data(module[MODULE_GPU].usage_chart);
  lv_chart_set_next_value(module[MODULE_GPU].usage_chart, series, info->gpu_usage);
  series = lv_obj_get_user_data(module[MODULE_GRAM].usage_chart);
  lv_chart_set_next_value(module[MODULE_GRAM].usage_chart, series, info->gpu_ram_usage);

  //更新组件数据图表
  lv_chart_series_t *module_cpu_series = lv_obj_get_user_data(module[MODULE_CPU].data_chart);
  lv_chart_set_next_value(module[MODULE_CPU].data_chart, module_cpu_series, info->cpu_temp);
  lv_chart_series_t *module_gpu_series = lv_obj_get_user_data(module[MODULE_GPU].data_chart);
  lv_chart_set_next_value(module[MODULE_GPU].data_chart, module_gpu_series, info->gpu_temp);
  lv_chart_series_t *module_ram_series = lv_obj_get_user_data(module[MODULE_RAM].data_chart);
  lv_chart_set_next_value(module[MODULE_RAM].data_chart, module_ram_series, info->ram_used);
  lv_chart_series_t *module_gram_series = lv_obj_get_user_data(module[MODULE_GRAM].data_chart);
  lv_chart_set_next_value(module[MODULE_GRAM].data_chart, module_gram_series, info->gpu_ram_used);

  //更新组件使用率标签
  lv_label_set_text_fmt(module[MODULE_CPU].usage_label, "%d", info->cpu_usage);
  lv_label_set_text_fmt(module[MODULE_RAM].usage_label, "%d", info->ram_usage);
  lv_label_set_text_fmt(module[MODULE_GPU].usage_label, "%d", info->gpu_usage);
  lv_label_set_text_fmt(module[MODULE_GRAM].usage_label, "%d", info->gpu_ram_usage);

  //更新组件数据标签
  lv_label_set_text_fmt(module[MODULE_CPU].data_label, module_data_fmt[MODULE_CPU], info->cpu_temp);
  lv_label_set_text_fmt(module[MODULE_RAM].data_label, module_data_fmt[MODULE_RAM], info->ram_used);
  lv_label_set_text_fmt(module[MODULE_GPU].data_label, module_data_fmt[MODULE_GPU], info->gpu_temp);
  lv_label_set_text_fmt(module[MODULE_GRAM].data_label, module_data_fmt[MODULE_GRAM], info->gpu_ram_used);

  //更新左侧组件信息标签
  lv_label_set_text_fmt(module_info[0].data_label, module_info_data_fmt[0], info->cpu_freq);
  lv_label_set_text_fmt(module_info[1].data_label, module_info_data_fmt[1], info->gpu_freq);
  lv_label_set_text_fmt(module_info[2].data_label, module_info_data_fmt[2], info->cpu_fan_speed);
  lv_label_set_text_fmt(module_info[3].data_label, module_info_data_fmt[3], info->gpu_fan_speed);
  lv_label_set_text_fmt(module_info[4].data_label, module_info_data_fmt[4], info->cpu_power / 10, info->cpu_power % 10);
  lv_label_set_text_fmt(module_info[5].data_label, module_info_data_fmt[5], info->gpu_power / 10, info->gpu_power % 10);

  //更新网络速率显示
  lv_label_set_text_fmt(down_label, "%d.%dKB/s", info->net_download_speed / 10, info->net_download_speed % 10);
  lv_label_set_text_fmt(up_label, "%d.%dKB/s", info->net_upload_speed / 10, info->net_upload_speed % 10);

  //更新时间显示
  char temp[2][3] = {"00", "00"};
  temp[0][0] += info->hour /10;
  temp[0][1] += info->hour %10;

  temp[1][0] += info->min /10;
  temp[1][1] += info->min %10;
  lv_label_set_text_fmt(time_label, "%s:%s", temp[0], temp[1]);

  //更新底部CPU使用率和网络下载速率大图表
  lv_chart_series_t *cpu_series = lv_obj_get_user_data(cpu_chart);
  lv_chart_set_next_value(cpu_chart, cpu_series, info->cpu_usage);
  lv_chart_series_t *net_series = lv_obj_get_user_data(net_chart);
  lv_chart_set_next_value(net_chart, net_series, info->net_download_speed / 10);

  lv_obj_t *charts[6] = {module[MODULE_CPU].data_chart, module[MODULE_GPU].data_chart, 
    module[MODULE_RAM].data_chart, module[MODULE_GRAM].data_chart,
    cpu_chart, net_chart
    };
  lv_chart_series_t *series_array[6] = {module_cpu_series, module_gpu_series, 
    module_ram_series, module_gram_series, 
    cpu_series, net_series
    };

  //组件数据图表底部CPU使用率和网络下载速率大图表自动刻度计算
  for(int i = 0; i < 6; i++)
    chart_auto_scale(charts[i], series_array[i], 0, 10);
}

/**
 *@brief sky主题释放函数
 */
static void pc_resource_gui_sky_theme_release(void)
{
  lv_obj_del_async(back_img);
}

/**
 *@brief 时间标签单击事件回调函数
 */
static void pc_resource_gui_sky_theme_icon_event_cb(lv_event_t *e)
{
    if (gui_opts != NULL && gui_opts->set_next_theme != NULL)
      gui_opts->set_next_theme();
}
